home *** CD-ROM | disk | FTP | other *** search
/ MacGames Sampler / PHT MacGames Bundle.iso / MacSource Folder / Samples from the CD / C and C++ / sesame C ƒ / ~ASAMPLE.INC next >
Text File  |  1986-08-31  |  9KB  |  205 lines

  1. /*   INCLUDE FILE FOR SAMPLE C PROGRAM  */
  2.  
  3. /* We start with a general description of how to use the compiler */
  4. /* That is followed by the actual #define statements for the sample */
  5. /* program */
  6.  
  7. /* WHAT IS SESAME C */
  8.  
  9. /* Sesame C is a development system for the Macintosh. */
  10. /* It includes a 68000 assembler and a C compiler. */
  11. /* The 68000 assembler is almost as good as you can get anywhere. */
  12. /* The only thing it lacks is macros.  The C compiler is a subset */
  13. /* of what a full C has.  The most notable lacks are no floating */
  14. /* point arithmetic, no structures and no multidimensional arrays. */
  15. /* Of course, these omissions can be got around by clever programming. */
  16. /* In the future, we may add them.  We mostly developed this */
  17. /* development system because we were 1) curious about cracking the */
  18. /* Mac environment, 2) wanted to be able to write real stand-alone */
  19. /* applications, 3) frustrated by the expense of buying one of the */
  20. /* main line development systems.  It's design then reflects our */
  21. /* needs/desires for getting into development.  You should find it */
  22. /* a powerful, inexpensive tool */
  23.  
  24. /* WHAT YOU NEED */
  25.  
  26. /* This compiler does most everything, but we do assume a few things. */
  27. /* We assume you have knowledge of C and 68000 assembler (at least one */
  28. /* of them) or that you want to learn.  We assume you have access */
  29. /* to a book describine the Macintosh toolbox routines. */
  30. /* Lastly, we assume you don't want to pay $200-500 for the */
  31. /* opportunity of beating up in C on the Macintosh. */
  32.  
  33. /* HOW TO COMPILE */
  34.  
  35. /* To compile the sample program simply select the C COMPILE... command */
  36. /* from the menu and select ASAMPLE.C.  The include file (as is so for */
  37. /* all include files) must be in the same folder as the source file you */
  38. /* you are compiling (assuming you are using HFS, of course).  You */
  39. /* will be prompted via dialog for a name for the object file that */
  40. /* is created.  You should put this in a folder with all your other */
  41. /* object or object libraries.  After compiling the sample, you can */
  42. /* make an application with it by selecting LINK & BUILD... from the */
  43. /* menu.  There should be a file with link instructions in the same */
  44. /* folder with your object files.  We have supplied one called */
  45. /* ASAMPLE.LNK.  Assuming you have use the default names to compile */
  46. /* object, this will make a real Macintosh program. */
  47.  
  48. /* ABOUT LIBRARIES */
  49.  
  50. /* One of our neat features is a library system for holding the object. */
  51. /* Without libraries even using the HFS you would find your object files */
  52. /* multiplying rapidly.  Libraries can be used to store any amount of */
  53. /* object.  To put things into them either use the ADD... command from the */
  54. /* Library menu, or select use library to direct all your assemblies */
  55. /* to the selected library.  If you blow it and put something into a */
  56. /* library by mistake you can delete individual members from the library */
  57. /* A friendly warning: no checking is performed to keep out duplicate */
  58. /* entries, so if you compile two different files with the same entry) */
  59. /* names (subroutine names for the uninitiated) you can get odd results */
  60. /* A friendly trick: if you want to know what is in a library select */
  61. /* EXTRACT... from the Library menu and get a listing.  Just cancel, if */
  62. /* you don't want to extract a copy of an object file. */
  63.  
  64. /* Libraries can be used interchangably with regular object files.  Only */
  65. /* the actual entries that are needed will be loaded into your application.*/
  66.  
  67. /* TECHNICAL NOTES */
  68.  
  69. /* We have only two variable types, long integer (32 bit, 4 byte) and */
  70. /* char (8 bit, 1 byte).  Of couse, we have arrays and pointers too but */
  71. /* only with these two basic types of variables.  All arithmetic is */
  72. /* signed 32 bit arithmetic (more or less).  We have no floating point */
  73. /* except by using the toolbox stuff explicitly.  This means we are */
  74. /* quite fast by the way. */
  75.  
  76. /* We can access any toolbox routine that is stack based by using the */
  77. /* TRAP feature of the compiler.  The form of TRAP calls is: */
  78. /* TRAP(trapnumber,arg1,arg2,arg3...);  The trap number is the */
  79. /* hex value for the trap (for example, 0XA9D5 is the hex trap number */
  80. /* for TECUT.  Each argument following the trap number must be in the */
  81. /* same order as show for the toolbox routines in any of the basic */
  82. /* books on the Macintosh toolbox.  Each argument should be followed */
  83. /* by a :B, :W, or :L to indicate if only a byte, word, or long word */
  84. /* is to be passed.  If you omit the size reference, the argument will */
  85. /* be passed as a long word.  If the trap returns a value as a function, */
  86. /* you must follow the word TRAP with a :B, :W, or :L to indicate the */
  87. /* size of the return value.  There are plenty of examples of all */
  88. /* kinds of TRAP calls in the ASAMPLE.C program.  Another friendly */
  89. /* warning: Be sure you do the argument and trapnumbers correctly.  */
  90. /* The toolbox routines are quite powerful and bad values can give */
  91. /* bizarre results that are hard to debug. */
  92.  
  93. /* Non-stacked based routines are a different matter.  Generally, these */
  94. /* need to be handled in assembler.  Some have already been provided, such */
  95. /* as flushevents and sethandlesize.  In the case of file IO, we have */
  96. /* created a generic routine PBIO that gives you access to all the */
  97. /* parameter block based routines.  By the way, when creating your */
  98. /* own assembler routines, be sure to have the entry names begin with */
  99. /* _ (an underbar).  This is way the C compiler calls all routines. */
  100.  
  101. /* One oddity, we require that you declare function arguments in */
  102. /* the same order that they are listed in the function.  For example, */
  103.  
  104. /* readfile(filename,volref)  */
  105. /*     char   filename[];     */
  106. /*     int    volref;         */
  107.  
  108. /* is the correct way to declare this function.  Reversing the */
  109. /* filename and volref lines, would not work properly */
  110.  
  111. /* LAST OF ALL... ENJOY YOURSELF.  Send us any ideas you have for */
  112. /* improvements.  We are working on such things as a library of */
  113. /* toolbox calls, structures, multidimernsional arrays, etc but */
  114. /* welcome clever ideas. */
  115.  
  116. /* #DEFINES */
  117.  
  118. /* One of the things registered owners get is a set of #defines for */
  119. /* the various Macintosh toolbox routines grouped by function */
  120.  
  121. #define      INITCURSOR      0XA850
  122. #define      INITPORT        0XA86D
  123. #define      INITGRAF        0XA86E
  124. #define      INITFONTS       0XA8FE
  125. #define      INITWINDOWS     0XA912
  126. #define      INITMENUS       0XA930
  127. #define      INITDIALOGS     0XA97B
  128. #define      INITRESOURCES   0XA995
  129. #define      TEINIT          0XA9CC
  130.  
  131. #define      NEWWINDOW       0XA913
  132. #define      DISPOSEWINDOW   0XA914
  133. #define      TEXTFONT        0XA887
  134. #define      TEXTSIZE        0XA88A
  135. #define      GETFONTINFO     0XA88B
  136. #define      MOVETO          0XA893
  137. #define      CLOSEWINDOW     0XA92D
  138. #define      SETPORT         0XA873
  139. #define      BEGINUPDATE     0XA922
  140. #define      ENDUPDATE       0XA923
  141. #define      DRAWCHAR        0XA883
  142. #define      SETRECT         0XA8A7
  143. #define      SCROLLRECT      0XA8EF
  144. #define      GETNEXTEVENT    0XA970
  145. #define      MENUKEY         0XA93E
  146. #define      MENUSELECT      0XA93D
  147. #define      HILITEMENU      0XA938
  148.  
  149. #define      NEWMENU         0XA931
  150. #define      APPENDMENU      0XA933
  151. #define      INSERTMENU      0XA935
  152. #define      DRAWMENUBAR     0XA937
  153.  
  154. #define      PTINRECT        0XA8AD
  155. #define      TENEW           0XA9D2
  156. #define      TEKEY           0XA9DC
  157. #define      TECUT           0XA9D6
  158. #define      TECOPY          0XA9D5
  159. #define      TEDELETE        0XA9D7
  160. #define      TEPASTE         0XA9DB
  161. #define      TESETSELECT     0XA9D1
  162. #define      TEIDLE          0XA9DA
  163. #define      TECLICK         0XA9D4
  164. #define      GLOBALTOLOCAL   0XA871
  165. #define      TEACTIVATE      0XA9D8
  166. #define      TEDEACTIVATE    0XA9D9
  167. #define      TEUPDATE        0XA9D3
  168.  
  169. #define      FINDWINDOW      0XA92C
  170. #define      NEWCONTROL      0XA954
  171. #define      FINDCONTROL     0XA96C
  172. #define      TRACKCONTROL    0XA968
  173. #define      SETCTLVALUE     0XA963
  174. #define      GETCTLVALUE     0XA960
  175. #define      GETCTLMAX       0XA962
  176. #define      SETCTLMAX       0XA965
  177. #define      STILLDOWN       0XA973
  178. #define      GETMOUSE        0XA972
  179. #define      TESTCONTROL     0XA966
  180. #define      HILITECONTROL   0XA95D
  181. #define      TESCROLL        0XA9DD
  182. #define      TECALTEXT       0XA9D0
  183. #define      DRAWCONTROLS    0XA969
  184. #define      TEDISPOSE       0XA9CD
  185. #define      GETWTITLE       0XA919
  186.  
  187. #define      appleid         32
  188. #define      fileid          33
  189. #define      editid          34
  190. #define      eol             13
  191. #define      pagelines       26  /* monaco lines per window of viewrect size */
  192.  
  193. /* extern declarations would normally go here */
  194. /* for example */
  195.  
  196. /* extern char  seventrec[16]; */
  197. /* extern int   tehnd,windptr; */
  198. /* extern int  applemenu, filemenu, editmenu;  */ 
  199.  
  200. /* There aren't any here, because the application fits into */
  201. /* one file.  Note, there aren't any static variables */
  202. /* These global externals can total up to 32k */
  203.  
  204.  
  205.